package com.sbm.task;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
// @EnableScheduling
public class SimpleTask {
    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleTask.class);

    // 默认无论多少任务，均为单线程执行
    // @Async 异步执行(多线程)

    // 间隔5秒执行一次（以上次完成时间为基准）
    @Scheduled(fixedDelay = 5000)
    @Async
    public void task() {
        LOGGER.info("1.间隔5秒（完成时间）");
    }

    // 间隔5秒执行一次（以上次完成时间为基准）
    @Scheduled(fixedDelay = 5000)
    @Async
    public void task1() {
        LOGGER.info("2.间隔5秒（完成时间）");
    }

    // 间隔5秒执行一次（以上次开始时间为基准）
    @Scheduled(fixedRate = 3000)
    @Async
    public void task2() {
        LOGGER.info("间隔3秒（开始时间）");
    }

    // 每天15点，间隔8秒执行
    // cron = "秒 分 时 日(月) 月 日(周) 年"
    // 时为例：值(6) 区间(8-20) 间隔(8-20/4) 列表(1,3,4)
    // 通配符：*所有 ？只用在日 /前开始后间隔
    // http://blog.csdn.net/prisonbreak_/article/details/49180307
    @Scheduled(cron = "0/8 0 15 * * ?")
    public void task3() {
        LOGGER.info("8-20点，间隔8秒");
    }
}
